﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace SpaceGame
{
    class Nave : Objeto
    {

        animacao andando;
        Texture2D imgTiro;
        List<Tiro> tiros;

        public Nave(Texture2D imagem, GameWindow Window, Texture2D tiro)
            :base(imagem, Window)
        {
            tiros = new List<Tiro>();
            imgTiro = tiro;
            posicao = new Vector2(Window.ClientBounds.Width / 2, Window.ClientBounds.Height + imagem.Height);
            velocidade = new Vector2(5, 5);
            //this.efeitoSonoro = efeitoSonoro;

            andando = new animacao();
            andando.qtd_quadros = 2;
            andando.quadros_seg = 4;
            andando.Y = 1;
            andando.quadro_X = imagem.Width / andando.qtd_quadros;
            andando.quadro_Y = imagem.Height / 3;
            _animacao = andando;
            colisao = new Rectangle((int)posicao.X - (_animacao.quadro_X / 2), (int)posicao.Y, andando.quadro_X, andando.quadro_Y);

        }

        //sobrecarregamento ou overload
        public override void Update(GameTime gameTime)
        { }

        public void Update(GameTime gameTime, KeyboardState teclado_atual, KeyboardState teclado_anterior, MouseState mouse_atual, MouseState mouse_anterior)
        {


            colisao.X = (int)posicao.X;
            colisao.Y = (int)posicao.Y;
            colisao.Width = andando.quadro_X;
            colisao.Height = andando.quadro_Y;

            if ((teclado_anterior.IsKeyDown(Keys.Right) && !teclado_atual.IsKeyDown(Keys.Right)) || (teclado_anterior.IsKeyDown(Keys.Left) && !teclado_atual.IsKeyDown(Keys.Left)))
                _animacao.Y = 1;

            if (teclado_atual.IsKeyDown(Keys.X) && !teclado_anterior.IsKeyDown(Keys.X))
            {
                Tiro tiro;
                tiro = new Tiro(imgTiro, window, posicao);
                tiros.Add(tiro);
            }

            if (teclado_atual.IsKeyDown(Keys.Right))
            {
                _animacao.Y = 2;
                posicao.X += velocidade.X;
            }

            if (teclado_atual.IsKeyDown(Keys.Left))
            {
                _animacao.Y = 0;
                posicao.X -= velocidade.X;
            }

            if (teclado_atual.IsKeyDown(Keys.Down))
            {
                posicao.Y += velocidade.Y;
            }

            if (teclado_atual.IsKeyDown(Keys.Up))
            {
                posicao.Y -= velocidade.Y;
            }


           if (posicao.X >= window.ClientBounds.Width - colisao.Width)
               posicao.X = window.ClientBounds.Width - colisao.Width;

           if (posicao.Y >= window.ClientBounds.Height - colisao.Height)
               posicao.Y = window.ClientBounds.Height - colisao.Height;

           if (posicao.X <= 0)
               posicao.X = 0;

           if (posicao.Y <= 0)
               posicao.Y = 0;

           if ((mouse_atual.LeftButton == ButtonState.Pressed))
           {
               posicao = new Vector2(mouse_atual.X, mouse_atual.Y);
           }

           tiros.ForEach(delegate(Tiro tiro)
           {
               tiro.Update(gameTime);
               if (!tiro.existe)
               {
                   tiros.Remove(tiro);
               }
           });
       }

        public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            base.Draw(gameTime, spriteBatch);
            tiros.ForEach(delegate(Tiro tiro)
            {
                tiro.Draw(gameTime, spriteBatch);
            });
        }
    }
}
